package com.shiliao.app.manager;

import android.content.Context;
import android.text.TextUtils;

import com.shiliao.app.ShiliaoApplication;
import com.shiliao.app.event.LoginMessageEvent;
import com.shiliao.app.event.MessageEvent;
import com.shiliao.app.manager.entity.UserEntity;
import com.shiliao.app.manager.entity.UserListEntity;
import com.shiliao.app.utils.YMKeyUtils;
import com.yimei.framework.util.LogUtil;
import com.yimei.framework.util.PreferenceHelper;

import org.greenrobot.eventbus.EventBus;
import org.json.JSONArray;
import org.json.JSONException;

/**
 * 用户管理公共类
 * 获取保存当前登录过的用户信息
 * 处理用户操作的公共方法
 * Created by yjl on 2017/7/10.
 */

public class YMUserManager {
    private static final String TAG = "YMUserManager";
    public static boolean bHasnewmessage;

    /**
     * 获取当前登录用户
     *
     * @param context
     * @return
     */
    public static UserEntity getUesrInfo(Context context) {
        // LogUtil.e("yjl", "获取用户信息");
        if (context == null) {
            return null;
        }
        UserListEntity mUsersList = getUesrListInfo(context);
        if (mUsersList == null || mUsersList.mUserList == null) {
            LogUtil.d(TAG, "获取用户信息mUserList is null");
            return null;
        }

        String userId = mUsersList.mUserID;
        // 如果没有设置登录的用户id则为无登录用户
        if (TextUtils.isEmpty(userId)) {
            return null;
        }
        if (null != mUsersList && mUsersList.mUserList.length() > 0) {
            for (int i = 0; i < mUsersList.mUserList.length(); ++i) {
                UserEntity user = new UserEntity();
                user.parseJSONObject(mUsersList.mUserList.optJSONObject(i));
                if (!TextUtils.isEmpty(user.mUserId) && userId.equals(user.mUserId)) {
                    if (!getUserLoginState(context)) {
                        LogUtil.i(TAG, "用户是未登录状态");
                        // 如果用户未登录则将access_token设置成null
                        user.mAccessToken = "";
                    }
                    // LogUtil.e("获取登录用户的信息：" + user.serializeToString());
                    return user;
                }

            }
        }
        return null;
    }

    /**
     * 获取用户登录状态
     *
     * @param context
     * @return
     */
    public static boolean getUserLoginState(Context context) {
        return PreferenceHelper.readBoolean(context, YMKeyUtils.FILE_YM_CONFIG,
                YMKeyUtils.KEY_LOGIN_STATE, false);
    }

    /**
     * 保存用户登录状态
     *
     * @param context
     * @param isLogin
     */
    public static void saveLoginState(Context context, boolean isLogin) {
        if (context == null) {
            return;
        }
        PreferenceHelper.write(context, YMKeyUtils.FILE_YM_CONFIG,
                YMKeyUtils.KEY_LOGIN_STATE, isLogin);
    }

    /**
     * 保存当前登录用户信息 必须要有user id为唯一账户标志
     *
     * @param mUser
     */
    public static void saveUserInfo(Context context, UserEntity mUser) {
        if (mUser == null) {
            return;
        }
        UserListEntity userList = getUesrListInfo(context);
        if (userList == null) {
            userList = new UserListEntity();
            userList.mUserList = new JSONArray();
        }
        if (!TextUtils.isEmpty(mUser.mUserId)) {
            // 统计登录用户账号
            // MobclickAgent.onProfileSignIn(mUser.mUserId);
        }
        if (!TextUtils.isEmpty(mUser.mPassWord)) {
            mUser.mPassWord = "";
        }
        if (null != userList.mUserList && userList.mUserList.length() > 0) {
            for (int i = 0; i < userList.mUserList.length(); ++i) {
                UserEntity user = new UserEntity();
                user.parseJSONObject(userList.mUserList.optJSONObject(i));
                if (mUser.equals(user) || mUser.isSameUser(user)) {
                    // if (mUser.isSameUser(user)) {
                    // 如果是同一个User则替换掉
                    if (!TextUtils.isEmpty(mUser.mUserId)) {
                        userList.mUserID = mUser.mUserId;
                    }
                    try {
                        userList.mUserList.put(i, mUser.serializeToJSONObject());
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    // LogUtil.d(TAG, "保存的用户信息1：" +
                    // userList.serializeToString());
                    PreferenceHelper.write(context, YMKeyUtils.FILE_YM_CONFIG,
                            YMKeyUtils.KEY_USERS, userList.serializeToString());
                    return;
                }
            }
            // 直接加入到列表中，如果没有相同的用户
            if (!TextUtils.isEmpty(mUser.mUserId)) {
                userList.mUserID = mUser.mUserId;
            }
            userList.mUserList.put(mUser.serializeToJSONObject());
            if (userList.mUserList.length() > 0) {
                // LogUtil.e("保存的用户信息2：" + userList.serializeToString());
                PreferenceHelper.write(context, YMKeyUtils.FILE_YM_CONFIG,
                        YMKeyUtils.KEY_USERS, userList.serializeToString());
            }
        } else {
            if (!TextUtils.isEmpty(mUser.mUserId)) {
                userList.mUserID = mUser.mUserId;
            }
            userList.mUserList.put(mUser.serializeToJSONObject());
            if (userList.mUserList.length() > 0) {
                // LogUtil.e("保存的用户信息3：" + userList.serializeToString());
                PreferenceHelper.write(context, YMKeyUtils.FILE_YM_CONFIG,
                        YMKeyUtils.KEY_USERS, userList.serializeToString());
            }
            return;
        }

    }


    /**
     * 获取当前保存的所有用户信息
     *
     * @param context
     * @return
     */
    public static UserListEntity getUesrListInfo(Context context) {
        if (context == null) {
            return null;
        }

        String userStr =
                PreferenceHelper.readString(context, YMKeyUtils.FILE_YM_CONFIG,
                        YMKeyUtils.KEY_USERS, null);
        // LogUtil.d("获取所有登录用户信息：" + userStr);
        if (TextUtils.isEmpty(userStr)) {
            return null;
        }
        UserListEntity userList = new UserListEntity();
        userList.parseJSONString(userStr);
        return userList;
    }

    /**
     * 登录成功并保存用户登录状态，发送登录事件
     */
    public static void sendLoginSuccessEvent() {
        saveLoginState(ShiliaoApplication.getInstance(), true);
        LoginMessageEvent messageEvent = new LoginMessageEvent();
        messageEvent.eventId = LoginMessageEvent.EVENT_ID_LOGIN;
        messageEvent.eventName = LoginMessageEvent.EVENT_USER_LOGIN;
        //如果订阅者未创建使用post发送方式
        //一般方式使用post即可
        EventBus.getDefault().post(messageEvent);
    }

//    /**
//     * 退出发送广播
//     */
//    public static void sendLoginOutEvent() {
//        LoginMessageEvent messageEvent = new LoginMessageEvent();
//        messageEvent.eventId = LoginMessageEvent.EVENT_ID_LOGIN;
//        messageEvent.eventName = LoginMessageEvent.EVENT_USER_LOGINOUT;
//        //如果订阅者未创建使用postSticky发送方式
//        //一般方式使用post即可
//        EventBus.getDefault().postSticky(messageEvent);
//    }


    /**
     * 退出登录
     */
    public static void Logout() {
        saveLoginState(ShiliaoApplication.getInstance(), false);
        //sendLoginOutEvent();
        sendToLoginView();
    }

    /**
     * 获取是否第一次登录
     *
     * @param context
     * @return
     */
    public static boolean getFirstLoginState(Context context) {
        return PreferenceHelper.readBoolean(context,
                YMKeyUtils.FILE_YM_CONFIG, YMKeyUtils.KEY_FIRST_LOGIN, true);
    }

    /**
     * 设置是否是第一次登录
     *
     * @param context
     * @param state
     * @return
     */
    public static boolean setFirstLoginState(Context context, boolean state) {
        PreferenceHelper.write(context,
                YMKeyUtils.FILE_YM_CONFIG, YMKeyUtils.KEY_FIRST_LOGIN, false);
        return state;
    }


    /**
     * 发送强制用户去登录的事件
     */
    private static void sendToLoginView() {
        MessageEvent event = new MessageEvent();
        event.eventId = MessageEvent.EVENT_ID_NEED_LOGIN;
        EventBus.getDefault().post(event);
        //saveLoginState(ShiliaoApplication.getInstance(), false);
    }

    /**
     * 保存用户userId
     */

    public static void saveUserId(Context context, String userId) {
        if (!TextUtils.isEmpty(userId)) {
            PreferenceHelper.write(context, "userInfo", "user_id", userId);
        }
        bHasnewmessage = false; //发现新用户时，默认 bHasnewmessage=false, added by luyi
    }

    /**
     * 获取userId
     */

    public static String getUserId(Context context) {
        String userId = PreferenceHelper.readString(context, "userInfo", "user_id");
        if (!TextUtils.isEmpty(userId)) {
            return userId;
        }
        return "0";
    }

}
